home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_11 / dugger / event.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-05  |  1.5 KB  |  70 lines

  1. #include "event.h"
  2. #include <string.h>
  3.  
  4. event::event( const char* name ) {
  5.  
  6.    APIRET rc;
  7.  
  8.    // --------------------------
  9.    // "\\sem32\\" + name + NULL;
  10.    // --------------------------
  11.  
  12.    char* fullname = new char[ strlen( name ) + 8 ];
  13.    strcpy( fullname, "\\SEM32\\" );
  14.    strcpy( fullname + 7, name );
  15.  
  16.    // ---------------------------
  17.    // Try creating the semaphore.
  18.    // ---------------------------
  19.  
  20.    rc = DosCreateEventSem( fullname, &handle, 0, 0 );
  21.  
  22.    if ( rc == 285 ) {
  23.       // -------------------------------------
  24.       // Duplicate name encountered.  try just
  25.       // opening the semaphore
  26.       // -------------------------------------
  27.  
  28.       handle = 0;
  29.  
  30.       DosOpenEventSem( fullname, &handle );
  31.  
  32.    }
  33.  
  34.    // ----------------------
  35.    // block on the semaphore
  36.    // ----------------------
  37.  
  38.    ULONG dummy;
  39.    DosWaitEventSem( handle, -1 );  //infinite wait
  40.  
  41.    // ----------------------------------
  42.    // Reset and then close the semaphore
  43.    // ----------------------------------
  44.  
  45.    DosResetEventSem( handle, &dummy );
  46.  
  47.    delete [] fullname;
  48. }
  49.  
  50.  
  51. void event::post( const char* name ) {
  52.  
  53.    HEV handle;
  54.  
  55.    // --------------------------
  56.    // "\\sem32\\" + name + NULL;
  57.    // --------------------------
  58.  
  59.    char* fullname = new char[ strlen( name ) + 8 ];
  60.    strcpy( fullname, "\\SEM32\\" );
  61.    strcpy( fullname + 7, name );
  62.  
  63.    handle = 0;
  64.    DosOpenEventSem( fullname, &handle );
  65.  
  66.    DosPostEventSem( handle );
  67.  
  68.    delete [] fullname;
  69. }
  70.